package com.hw.dao;

import java.util.*;
import java.io.*;
/**
 * <p>Title: Seria类</p>
 * <p>Description: 文件中读取对象和把对象写入文件中</p>
 * <p>Copyright: Copyright (c) 2010-7-29</p>
 * <p>Filename: Seria.java</p>
 * @author 李耀华
 * @version 1.0
 */
public class Seria {
	public static ArrayList list = null;

	/**
 *<br>方法说明：把对象写入文件
 *<br>输入参数：Account 类型
 *<br>返回类型：
 */
	public static void serialize(Account account) {
        //定一个File类对象 制定文件的路径
		File file = new File(".", "dat/Account.dat");
		//如果文件存在 直接调用读出来的文件的集合对象
		if (file.exists()) {

			list = entiserialize();

		} 
		//如果文件不存在新建一个集合对象 
		else {
        
			list = new ArrayList<Account>();

		}
		//把获得参数通过add()方法添加到集合里面
		list.add(account);

		try {
			// 把数据写入文件
			FileOutputStream fos = new FileOutputStream(file);
			//把数据从内存传到外存的管道
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			//把数据添加到管道
			oos.writeObject(list);
			oos.close();
		} catch (Exception e) {
			System.out.println("写出文件发生异常");
		}

	}

	/**
 *<br>方法说明：从文件中读取集合对象
 *<br>输入参数：
 *<br>返回类型：ArrayList 类型
 */
	public static ArrayList entiserialize() {
		//制定文件的路径
		File file = new File(".", "dat/Account.dat");
		try {
			//从文件中抓取数据
			FileInputStream fis = new FileInputStream(file);
			//把数据从外存到内存的管道流
			ObjectInputStream ois = new ObjectInputStream(fis);
			//读取获得的集合对象
			list = (ArrayList) ois.readObject();

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//返回集合对象
		return list;

	}
	/**
 *<br>方法说明：替换集合中的元素
 *<br>输入参数：int,Account
 *<br>返回类型：
 */
	public static void resetAccount(int n, Account an) {
	   //指定文件的路径
		File file = new File(".", "dat/Account.dat");
		try {
			//读取文件
			FileInputStream fis = new FileInputStream(file);
			//把数据传输到内存的流
			ObjectInputStream ois = new ObjectInputStream(fis);
			//出去对象
			list = (ArrayList) ois.readObject();
			//替换下标为n的元素为an
			list.set(n, an);
			try {
				//把数据写入到文件
				FileOutputStream fos = new FileOutputStream(file);
				//把数据从内存传到外存
				ObjectOutputStream oos = new ObjectOutputStream(fos);
				//把数据写入管道
				oos.writeObject(list);
				//关闭这个管道
				oos.close();
			} catch (Exception e) {
				System.out.println("写出文件发生异常");
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
